---
title: HTTP 缓存机制
description: 介绍 HTTP 缓存原理、相关头部字段及常见缓存策略
---

# HTTP 缓存机制

HTTP 缓存用于提升性能、减少服务器压力和带宽消耗。

## 缓存类型
- **强制缓存**：客户端直接使用本地缓存，无需与服务器通信。
- **协商缓存**：客户端与服务器协商是否使用缓存，如 ETag、Last-Modified。

## 相关头部字段
| 字段 | 作用 | 示例 |
|------|------|------|
| Cache-Control | 控制缓存行为 | Cache-Control: max-age=3600, no-cache |
| Expires | 绝对过期时间 | Expires: Wed, 21 Oct 2023 07:28:00 GMT |
| ETag | 实体标签，用于协商缓存 | ETag: "abc123" |
| Last-Modified | 最后修改时间 | Last-Modified: Tue, 20 Jun 2023 10:00:00 GMT |
| Pragma | 兼容旧版缓存控制 | Pragma: no-cache |

## 常见缓存策略
- **max-age**：指定资源可缓存的最大秒数。
- **no-cache**：每次请求都需与服务器验证。
- **no-store**：不缓存任何内容。
- **public/private**：public 表示所有用户可缓存，private 仅特定用户可缓存。

## 协商缓存流程
1. 客户端请求资源，服务器返回 ETag 或 Last-Modified。
2. 下次请求时，客户端带上 If-None-Match 或 If-Modified-Since。
3. 服务器判断资源是否变更，未变更则返回 304 状态码。

## 缓存失效场景
- 资源被修改或删除
- 缓存过期
- 服务器配置禁止缓存

## 参考资料
- [MDN Web Docs: HTTP Caching](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Caching)
- [RFC 7234: HTTP/1.1 Caching](https://datatracker.ietf.org/doc/html/rfc7234)